{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "2 Physical GPUs, 2 Logical GPUs\n"
     ]
    }
   ],
   "source": [
    "import tensorflow as tf\n",
    "import graphgallery \n",
    "import matplotlib.pyplot as plt\n",
    "\n",
    "\n",
    "# Set if memory growth should be enabled for ALL `PhysicalDevice`.\n",
    "graphgallery.set_memory_growth()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "'2.1.2'"
      ]
     },
     "execution_count": 2,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "tf.__version__"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "'0.4.0'"
      ]
     },
     "execution_count": 3,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "graphgallery.__version__"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Load the Datasets\n",
    "+ cora\n",
    "+ citeseer\n",
    "+ pubmed"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [],
   "source": [
    "from graphgallery.data import Planetoid\n",
    "\n",
    "# set `verbose=False` to avoid these printed tables\n",
    "data = Planetoid('cora', root=\"~/GraphData/datasets\", verbose=False)\n",
    "graph = data.graph\n",
    "idx_train, idx_val, idx_test = data.split()\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "{'citeseer', 'cora', 'pubmed'}"
      ]
     },
     "execution_count": 5,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "data.supported_datasets"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Training...\n",
      "200/200 [==============================] - 3s 16ms/step - loss: 2.5985 - acc: 1.0000 - val_loss: 3.1954 - val_acc: 0.7920 - time: 3.2760\n",
      "Testing...\n",
      "1/1 [==============================] - 0s 122ms/step - test_loss: 3.5763 - test_acc: 0.8280 - time: 0.1216\n",
      "Test loss 3.5763, Test accuracy 82.80%\n"
     ]
    }
   ],
   "source": [
    "from graphgallery.nn.models import RobustGCN\n",
    "model = RobustGCN(graph, attr_transform=\"normalize_attr\", device='GPU', seed=123)\n",
    "model.build()\n",
    "# train with validation\n",
    "his = model.train(idx_train, idx_val, verbose=1, epochs=200)\n",
    "# train without validation\n",
    "# his = model.train(idx_train, verbose=1, epochs=100)\n",
    "loss, accuracy = model.test(idx_test)\n",
    "print(f'Test loss {loss:.5}, Test accuracy {accuracy:.2%}')\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Show model summary"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Model: \"robust_gcn\"\n",
      "__________________________________________________________________________________________________\n",
      "Layer (type)                    Output Shape         Param #     Connected to                     \n",
      "==================================================================================================\n",
      "attr_matrix (InputLayer)        [(None, 1433)]       0                                            \n",
      "__________________________________________________________________________________________________\n",
      "adj_matrix_1 (InputLayer)       [(None, None)]       0                                            \n",
      "__________________________________________________________________________________________________\n",
      "adj_matrix_2 (InputLayer)       [(None, None)]       0                                            \n",
      "__________________________________________________________________________________________________\n",
      "gaussion_convolution_f (Gaussio ((None, 64), (None,  91712       attr_matrix[0][0]                \n",
      "                                                                 adj_matrix_1[0][0]               \n",
      "                                                                 adj_matrix_2[0][0]               \n",
      "__________________________________________________________________________________________________\n",
      "gaussion_convolution_d (Gaussio ((None, 7), (None, 7 896         gaussion_convolution_f[0][0]     \n",
      "                                                                 gaussion_convolution_f[0][1]     \n",
      "                                                                 adj_matrix_1[0][0]               \n",
      "                                                                 adj_matrix_2[0][0]               \n",
      "__________________________________________________________________________________________________\n",
      "sample (Sample)                 (None, 7)            0           gaussion_convolution_d[0][0]     \n",
      "                                                                 gaussion_convolution_d[0][1]     \n",
      "__________________________________________________________________________________________________\n",
      "node_index (InputLayer)         [(None,)]            0                                            \n",
      "__________________________________________________________________________________________________\n",
      "gather (Gather)                 (None, 7)            0           sample[0][0]                     \n",
      "                                                                 node_index[0][0]                 \n",
      "__________________________________________________________________________________________________\n",
      "tf_op_layer_Square (TensorFlowO [(None, 64)]         0           gaussion_convolution_f[0][0]     \n",
      "__________________________________________________________________________________________________\n",
      "tf_op_layer_add_1 (TensorFlowOp [(None, 64)]         0           gaussion_convolution_f[0][1]     \n",
      "__________________________________________________________________________________________________\n",
      "tf_op_layer_add (TensorFlowOpLa [(None, 64)]         0           tf_op_layer_Square[0][0]         \n",
      "                                                                 gaussion_convolution_f[0][1]     \n",
      "__________________________________________________________________________________________________\n",
      "tf_op_layer_Log (TensorFlowOpLa [(None, 64)]         0           tf_op_layer_add_1[0][0]          \n",
      "__________________________________________________________________________________________________\n",
      "tf_op_layer_sub (TensorFlowOpLa [(None, 64)]         0           tf_op_layer_add[0][0]            \n",
      "                                                                 tf_op_layer_Log[0][0]            \n",
      "__________________________________________________________________________________________________\n",
      "tf_op_layer_sub_1 (TensorFlowOp [(None, 64)]         0           tf_op_layer_sub[0][0]            \n",
      "__________________________________________________________________________________________________\n",
      "tf_op_layer_Mean (TensorFlowOpL [(None,)]            0           tf_op_layer_sub_1[0][0]          \n",
      "__________________________________________________________________________________________________\n",
      "tf_op_layer_mul (TensorFlowOpLa [(None,)]            0           tf_op_layer_Mean[0][0]           \n",
      "__________________________________________________________________________________________________\n",
      "tf_op_layer_Sum (TensorFlowOpLa [()]                 0           tf_op_layer_mul[0][0]            \n",
      "__________________________________________________________________________________________________\n",
      "tf_op_layer_mul_1 (TensorFlowOp [()]                 0           tf_op_layer_Sum[0][0]            \n",
      "__________________________________________________________________________________________________\n",
      "add_loss (AddLoss)              ()                   0           tf_op_layer_mul_1[0][0]          \n",
      "==================================================================================================\n",
      "Total params: 92,608\n",
      "Trainable params: 92,608\n",
      "Non-trainable params: 0\n",
      "__________________________________________________________________________________________________\n"
     ]
    }
   ],
   "source": [
    "model.summary()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Visualization Training "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 1080x360 with 2 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "import matplotlib.pyplot as plt\n",
    "with plt.style.context(['science', 'no-latex']):\n",
    "    fig, axes = plt.subplots(1, 2, figsize=(15, 5))\n",
    "    axes[0].plot(his.history['acc'], label='Train accuracy')\n",
    "    axes[0].plot(his.history['val_acc'], label='Val accuracy')\n",
    "    axes[0].legend()\n",
    "    axes[0].set_title('Accuracy')\n",
    "    axes[0].set_xlabel('Epochs')\n",
    "    axes[0].set_ylabel('Accuracy')\n",
    "\n",
    "\n",
    "    axes[1].plot(his.history['loss'], label='Training loss')\n",
    "    axes[1].plot(his.history['val_loss'], label='Validation loss')\n",
    "    axes[1].legend()\n",
    "    axes[1].set_title('Loss')\n",
    "    axes[1].set_xlabel('Epochs')\n",
    "    axes[1].set_ylabel('Loss')\n",
    "    \n",
    "    plt.autoscale(tight=True)\n",
    "    plt.show()    "
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.7.3"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}
